package com.itheima.d2_thread_api;

/**
 * 目标：掌握Thread的常用方法。
 *
 *  Thread提供的常用方法                               说明
 * public void run()                        线程的任务方法
 * public void start()                      启动线程
 * public String getName()                  获取当前线程的名称，线程名称默认是Thread-索引
 * public void setName(String name)         为线程设置名称
 * public static Thread currentThread()     获取当前执行的线程对象
 * public static void sleep(long time)      让当前执行的线程休眠多少毫秒后，再继续执行
 * public final void join()...              让调用当前这个方法的线程先执行完！
 *
 *  Thread提供的常见构造器
 * public Thread(String name)                   可以为当前线程指定名称
 * public Thread(Runnable target)               封装Runnable对象成为线程对象
 * public Thread(Runnable target, String name)  封装Runnable对象成为线程对象，并指定线程名称
 *
 * Thread类还提供了诸如：yield、interrupt、守护线程、线程优先级等线程的控制方法，
 * 在开发中很少使用，这些方法会后续需要用到的时候再讲解。
 */
public class ThreadTest1 {
    public static void main(String[] args) {
        /*
        源码：
        有参构造器
        public Thread(String name) {
        this(null, null, name, 0);
    }
    无参构造器
        public Thread() {
        this(null, null, "Thread-" + nextThreadNum(), 0);
    }
         */
        Thread t1 = new MyThread("1号线程");
        //补充，也可以不用setName方法，MyThread是Thread的子类，直接调用Thread的有参构造器给线程设置名字，那么MyThread里面也需要一个有参构造器
        // t1.setName("1号线程");  //放在start方法前设置名字。
        t1.start();
        System.out.println(t1.getName()); // 默认的线程名字就是：Thread-0

        //再次创建一个线程
        Thread t2 = new MyThread("2号线程");
        // t2.setName("2号线程");
        t2.start();
        System.out.println(t2.getName()); //默认的线程名字就是：Thread-1

        // 主线程对象的名字
        // 哪个线程执行它，它就会得到哪个线程对象。public static Thread currentThread()     获取当前执行的线程对象
        Thread m = Thread.currentThread();      //运行到这里，是主线程执行它，所以得到主线程对象
        m.setName("最牛的线程main");
        System.out.println(m.getName()); //默认的线程名字就是：main
        System.out.println("");

        for (int i = 1; i <= 5; i++) {
            System.out.println(m.getName() + ":线程输出：" + i);
        }
    }
}
